package stack

import "github.com/pkg/errors"

type Stack struct {
	Data []int
}

func New() Stack {
	return Stack{Data: []int{}}
}

func (s *Stack) Push(e int) {
	s.Data = append(s.Data, e)
}

func (s *Stack) Pop() int {
	r := s.Data[len(s.Data)-1]
	s.Data = s.Data[:len(s.Data)-1]

	return r
}

func (s *Stack) IsEmpty() bool {
	if len(s.Data) == 0 {
		return true
	} else {
		return false
	}
}

func (s *Stack) Peek() (int, error) {
	if s.IsEmpty() {
		return 0, errors.New("stack is empty.")
	} else {
		return s.Data[len(s.Data)-1], nil
	}

}
